home *** CD-ROM | disk | FTP | other *** search
/ Windows Expert / Windows Expert.iso / desktop / executor.zip / EXECSRC.ZIP / EXECUTOR.C next >
C/C++ Source or Header  |  1991-06-25  |  10KB  |  272 lines

  1. //
  2. //      EXECUTOR.EXE
  3. //
  4. //      Version 1.0
  5. //
  6. //      25 June 1991
  7. //
  8. //      (c) 1991   by   Innovation Inc
  9. //
  10. //      Developed by Chris Nystrom, and J.R. McConnell
  11. //
  12.  
  13. #include <windows.h>
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include <io.h>
  18. #include "executor.h"
  19.  
  20. char
  21.     szIFileName [96] = "",      // Input File Name
  22.     szFileSpec [16] = "*.exe",  // Initial File Specification
  23.     szAppName [] = "Executor";  // Application Name
  24.  
  25. HANDLE  hInstance;
  26.  
  27. int     PASCAL WinMain (HANDLE, HANDLE, LPSTR, int);
  28. long    FAR PASCAL WndProc (HWND, WORD, WORD, LONG);
  29. BOOL    FAR PASCAL FileDlgProc (HWND, WORD, WORD, LONG);
  30. BOOL    FAR PASCAL AboutDlgProc (HWND, WORD, WORD, LONG);
  31.  
  32. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  33.                     LPSTR lpszCmdParam, int nCmdShow)
  34.     {
  35.     HWND        hWnd;
  36.     MSG         message;
  37.     WNDCLASS    class;
  38.     HMENU       hMenu;
  39.  
  40.     if (!hPrevInstance)
  41.         {
  42.         class.style = NULL;
  43.         class.lpfnWndProc = WndProc;
  44.         class.cbClsExtra = 0;
  45.         class.cbWndExtra = 0;
  46.         class.hInstance = hInstance;
  47.         class.hIcon = LoadIcon (hInstance, szAppName);
  48.         class.hCursor = LoadCursor (NULL, IDC_ARROW);
  49.         class.hbrBackground = GetStockObject (WHITE_BRUSH);
  50.         class.lpszMenuName = szAppName;
  51.         class.lpszClassName = szAppName;
  52.         RegisterClass (&class);
  53.         }
  54.     hWnd = CreateWindow (szAppName, "File Executor", WS_OVERLAPPEDWINDOW,
  55.                 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  56.                 NULL, NULL, hInstance, NULL);
  57.     hMenu = GetSystemMenu (hWnd, FALSE);
  58.     AppendMenu (hMenu, MF_SEPARATOR, 0, NULL);
  59.     AppendMenu (hMenu, MF_STRING, IDM_ABOUT, "About ...");
  60.     ShowWindow (hWnd, SW_SHOWMINNOACTIVE) ;
  61.     UpdateWindow (hWnd);
  62.     while (GetMessage (&message, NULL, 0, 0))
  63.         {
  64.         TranslateMessage(&message);
  65.         DispatchMessage(&message);
  66.         }
  67.     return message.wParam;
  68.     }
  69.  
  70. // Standard Windows Procedure
  71. long FAR PASCAL WndProc (HWND hWnd, WORD message, WORD wParam, LONG lParam)
  72.     {
  73.     static FARPROC  lpfnFileDlgProc;
  74.     static FARPROC  lpfnAboutDlgProc;
  75.  
  76.     switch (message)
  77.         {
  78.         // Create Application and Dialog Boxes
  79.         case WM_CREATE:
  80.             hInstance = ((LPCREATESTRUCT) lParam) -> hInstance;
  81.             lpfnFileDlgProc = MakeProcInstance (FileDlgProc, hInstance);
  82.             lpfnAboutDlgProc = MakeProcInstance (AboutDlgProc, hInstance);
  83.             return 0;
  84.  
  85.         case WM_SYSCOMMAND:
  86.             switch (wParam)
  87.                 {
  88.                 // About selected from System Menu
  89.                 case IDM_ABOUT:
  90.                     DialogBox (hInstance, "AboutBox", hWnd,
  91.                             lpfnAboutDlgProc);
  92.                     return 0;
  93.                 }
  94.             break;
  95.  
  96.         // Open File Selection Dialog Box and execute program
  97.         case WM_QUERYOPEN:
  98.             DialogBox (hInstance, "FILE", hWnd, lpfnFileDlgProc);
  99.             if (strlen(szIFileName) > 0)
  100.                 WinExec(szIFileName, SW_SHOWNORMAL);
  101.             return 0;
  102.  
  103.         // Quit Application
  104.         case WM_DESTROY:
  105.             PostQuitMessage (0);
  106.             return 0;
  107.         }
  108.     return DefWindowProc (hWnd, message, wParam, lParam);
  109.     }
  110.  
  111. // Procedure for File Selection Dialog Box
  112. BOOL FAR PASCAL FileDlgProc  (HWND hDlg, WORD message, WORD wParam, LONG lParam)
  113.     {
  114.     char
  115.         work1 [80],                 // Temporary workspace 1
  116.         work2 [80],                 // Temporary workspace 2
  117.         cLastChar = 0x00;           // chr 0 (last char of string)
  118.     short       nEditLen = 0x00;    // Length of Edit Field
  119.     static int  nExtFlag = DLG_EXE; // Current FileSpec Flag
  120.  
  121.  
  122.     switch (message)
  123.         {
  124.         case WM_INITDIALOG:
  125.             SendDlgItemMessage (hDlg, IDD_IFNAME, EM_LIMITTEXT, 80, 0L);
  126.             DlgDirList (hDlg, szFileSpec, IDD_FLIST, NULL, FILES);
  127.             DlgDirList (hDlg, szFileSpec, IDD_DLIST, IDD_FPATH, PATH);
  128.             SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
  129.             InvalidateRect (hDlg, NULL, TRUE);
  130.             CheckRadioButton(hDlg, DLG_ALL, DLG_EXE, nExtFlag);
  131.             SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  132.             return TRUE;
  133.  
  134.         case WM_COMMAND:
  135.             switch (wParam)
  136.                 {
  137.                 case IDD_FLIST:
  138.                     switch (HIWORD (lParam))
  139.                         {
  140.                         case LBN_SELCHANGE:
  141.                             DlgDirSelect (hDlg, szIFileName, IDD_FLIST);
  142.                             SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  143.                             return TRUE;
  144.  
  145.                         case LBN_DBLCLK:
  146.                             DlgDirSelect (hDlg, szIFileName, IDD_FLIST);
  147.                             SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  148.                             SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  149.                             return TRUE;
  150.                         }
  151.                     break;
  152.  
  153.                 case IDD_DLIST:
  154.                     switch (HIWORD (lParam))
  155.                         {
  156.                         case LBN_SELCHANGE:
  157.                             DlgDirSelect (hDlg, szIFileName, IDD_DLIST);
  158.                             lstrcat (szIFileName, szFileSpec);
  159.                             SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  160.                             return TRUE;
  161.  
  162.                         case LBN_DBLCLK:
  163.                             DlgDirSelect (hDlg, szIFileName, IDD_DLIST);
  164.                             lstrcat (szIFileName, szFileSpec);
  165.                             DlgDirList (hDlg, szFileSpec, IDD_FLIST, NULL, FILES);
  166.                             DlgDirList (hDlg, szFileSpec, IDD_DLIST, IDD_FPATH, PATH);
  167.                             SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  168.                             SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  169.                             return TRUE;
  170.                         }
  171.                     break;
  172.  
  173.                 case DLG_EXE:
  174.                     lstrcpy(szFileSpec,"*.exe");
  175.                     lstrcpy (szIFileName, szFileSpec);
  176.                     nExtFlag = DLG_EXE;
  177.                     SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  178.                     SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  179.                     return TRUE;
  180.  
  181.                 case DLG_COM:
  182.                     lstrcpy(szFileSpec,"*.com");
  183.                     lstrcpy (szIFileName, szFileSpec);
  184.                     nExtFlag = DLG_COM;
  185.                     SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  186.                     SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  187.                     return TRUE;
  188.  
  189.                 case DLG_BAT:
  190.                     lstrcpy(szFileSpec,"*.bat");
  191.                     lstrcpy (szIFileName, szFileSpec);
  192.                     nExtFlag = DLG_BAT;
  193.                     SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  194.                     SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  195.                     return TRUE;
  196.  
  197.                 case DLG_ALL:
  198.                     lstrcpy(szFileSpec,"*.*");
  199.                     lstrcpy (szIFileName, szFileSpec);
  200.                     nExtFlag = DLG_ALL;
  201.                     SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  202.                     SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  203.                     return TRUE;
  204.  
  205.                 case DLG_OK:
  206.                     GetDlgItemText (hDlg, IDD_IFNAME, szIFileName, 80);
  207.                     nEditLen = lstrlen (szIFileName);
  208.                     cLastChar = *AnsiPrev (szIFileName, szIFileName + nEditLen);
  209.                     if (cLastChar == '\\' || cLastChar == ':')
  210.                         lstrcat (szIFileName, szFileSpec);
  211.                     if (strchr (szIFileName, '*') || strchr (szIFileName, '?'))
  212.                         {
  213.                         DlgDirList (hDlg, szIFileName, IDD_FLIST, NULL, FILES);
  214.                         if (DlgDirList (hDlg, szIFileName, IDD_DLIST, IDD_FPATH, PATH))
  215.                             {
  216.                             lstrcpy (szFileSpec, szIFileName);
  217.                             SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
  218.                             }
  219.                         else
  220.                             MessageBeep (0);
  221.                         return TRUE;
  222.                         }
  223.                     lstrcat (lstrcat (szIFileName,"\\"), szFileSpec);
  224.                     DlgDirList (hDlg, szIFileName, IDD_FLIST, NULL, FILES);
  225.                     if (DlgDirList (hDlg, szIFileName, IDD_DLIST, IDD_FPATH, PATH))
  226.                         {
  227.                         lstrcpy (szFileSpec, szIFileName);
  228.                         SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
  229.                         return TRUE;
  230.                         }
  231.                     szIFileName [nEditLen] = '\0';
  232.                     if (access (szIFileName, 0x04))
  233.                         {
  234.                         LoadString (hInstance, ERR1, work1, 128);
  235.                         sprintf (work2, work1, szIFileName);
  236.                         MessageBox (hDlg, work2, szAppName, MB_ICONINFORMATION | MB_OK);
  237.                         return TRUE;
  238.                         }
  239.                     OemToAnsi (szIFileName, szIFileName);
  240.                     EndDialog (hDlg, FALSE);
  241.                     return TRUE;
  242.  
  243.                 case DLG_CAN:
  244.                     szIFileName [0] = 0x00;
  245.                     EndDialog (hDlg, FALSE);
  246.                     return TRUE;
  247.                 }
  248.         }
  249.     return FALSE;
  250.     }
  251.  
  252. // Procedure for About Dialog Box
  253. BOOL FAR PASCAL AboutDlgProc(HWND hDlg, WORD message, WORD wParam, LONG lParam)
  254.     {
  255.     switch (message)
  256.         {
  257.         case WM_INITDIALOG:
  258.             return (TRUE);
  259.  
  260.         case WM_COMMAND:
  261.             switch (wParam)
  262.                 {
  263.                 case IDOK:
  264.                 case IDCANCEL:
  265.                     EndDialog(hDlg, TRUE);
  266.                     return (TRUE);
  267.                 }
  268.             break;
  269.         }
  270.     return (FALSE);
  271.     }
  272.